"""
转换数据类型的作用：
  问：input()接收到用户输入的数据类型是字符串的，如果用户输入的是288，想要得到整型该怎么操作？
  答：转换数据类型即可，即将字符串类型转换成整型

需要注意的一点是：并非所有的值都可以强制转换成其他的类型，如：就没法将str中的英文转换成int
  -------**********------------
转换数据类型常用的函数：
    int(x)：将x转换成一个整数
    float(x)：将x转换成一个浮点数
    str2(x)：将对象x转换成字符串
    tuple(s)：将序列s转换成一个元组
    list(s)：将序列s转换成一个列表
    eval(str2)：用来计算在字符串中的有效python表达式，并返回一个对象
"""

# 示例：都加双引号了，全是字符串
str1 = "10"
str2 = "[1,2,3]"
str3 = "(4,5,6)"
str4 = "name"

# 1. 整型int(x)：将x转换成一个整数
res1 = int(str1)  # 使用int()将str1的字符串数据，转换成整型，然后赋值给变量res1
print(res1)  # 打印res1，可以看出，控制台的输出=10，而不是"10"。说明已经将str1的字符串转换成了整型
print(int(str1))  # 也可以不赋值，直接的使用print输出，与上述作用是一样的。
print(type(str1))  # 查看str1的数据类型-- <class 'str2'>
print(type(res1))  # 查看tes1的数据类型-- <class 'int'>
print(int(str2))  # 因为不属于整型，所以转换报错
print(int(str3))  # 因为不属于整型，所以转换报错
print(int(str4))  # 因为不属于整型，所以转换报错
# 除了str1之外，就没法将其他的数据进行转换，因为其他的数据不属于int

# 2. 浮点数float(x)：将x转换成一个浮点数
res2 = float(str1)  # 使用float将str1的字符串转换成浮点数，然后赋值给变量res2
print(res2)
print(type(str1))
print(type(res2))

# 3. 字符串str(x)：将对象x转换成字符串

# 4. 元组tuple(s)：将序列s转换成一个元组

# 5. 列表list(s)：将序列s转换成一个列表

# 6. eval(str2)：用来计算在字符串中的有效python表达式，并返回一个对象(简单来说就是将字符串的双引号去除，保留双引号内的数据)

# 练习：
num = input("请在下方控制台输入您的幸运数字\n")
print(f"您的幸运数字是{num}!!")
print(type(num))  # 查看未转换之前num的数据类型 -- <class 'str2'>
print(type(int(num)))  # 查看转换成int之后，num的数据类型 -- <class 'int'>
